package com.salim.leetcode.$75;

/**
 * 还有一个方法遍历一遍后统计三个颜色的数量 再写回数组 等于遍历两遍
 */
public class SortColors {
    //三根指针 i表示下一个等待0的位置 j表示下一个等待2的位置 curr表示当前遍历位置
    //该方法只用遍历一遍
    public void sortColors(int[] nums) {

        int i = 0;
        int curr = 0;
        int j = nums.length-1;

        while(curr <= j){

            if(nums[curr] == 0){
                swap(nums, i, curr);
                i++;
                curr++;
            }else if(nums[curr] == 2){
                swap(nums, curr, j);
                j--;
            }else{
                curr++;
            }
        }
    }

    void swap(int [] arr, int x, int y){
        int tmp = arr[x];
        arr[x] = arr[y];
        arr[y] = tmp;
    }
}
